package com.dys.test16;

/**
 * @className: com.dys.test15.Product
 * @description: 商品类
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/20 下午8:27
 */
public class Product {
    /**
     * 商品名词
     */
    private String name;

    /**
     * 品牌
     */
    private String brand;

    /**
     * 引入一个灯，true: 红色，false: 绿色。默认情况下没有商品，让生产者先生成，然后消费者再消费
     */
    boolean flag = false;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    /**
     * 同步方法：生产共享商品
     *
     * @param brand 品牌名
     * @param name  商品名称
     */
    public synchronized void setProduct(String brand, String name) {
        // 红灯：有商品，生产者不生产，等着消费者消费
        if (flag == true) {
            try {
                wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        // 灯是绿色，就开始生产商品
        this.setBrand(brand);
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        this.setName(name);
        System.out.println("生产者生产了：【" + this.getBrand() + "】---->" + this.getName());
        // 生产完商品后，将灯变为红色
        flag = true;
        // 告诉消费者去消费
        notify();
    }

    /**
     * 同步方法，将消费信息打印
     */
    public synchronized void getProduct() {
        // 没有商品，等待生产者生产
        if (flag == false) {
            try {
                wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        // 有商品,进行消费
        System.out.println("消费者消费了：【" + this.getBrand() + "】====>" + this.getName());
        // 消费完，灯变色
        flag = false;
        // 通知生产者生产商品
        notify();
    }
}
